<?php
namespace controller;
require_once ('src/Model/LoginModel.php');
require_once ('src/View/LoginView.php');
require_once ('src/View/CookieView.php');
require_once ('src/Controller/ApplicationController.php');
require_once ('src/Controller/NewUserController.php');

class LoginController {


	/**
    * @return String HTML
    *
    * här kollas om användaren har rätt inloggningsuppgifter och om kakor är satta och ska användas
    */
	public function checkLogin(){

		// skapar 4 nya objekt utifrån dess klasser
        $loginModel = new \model\LoginModel();
        $loginView = new \view\LoginView();
        $cookieView = new \view\CookieView($loginModel);
        $applicationController = new \controller\ApplicationController();
        $newUserController = new \controller\NewUserController($loginModel);

        // loginView object anropar hasLogedout function och om den retunerar true då har användaren klickat logga ut och if sattsen
        // körs och loginModel object anropar då sessionLoginModel->hasBeenLogedin, för att ta reda på om man nyligen loggat ut eller om man inte är inloggad
        // och setUserHasLogedout functionen är false användaren ej inloggad
    	if ($loginView->hasLogedout()) {
    	    $loginModel->sessionLoginModel->hasBeenLogedin();
            $loginModel->setUserHasLogedOut();
            $cookieView->resetCookies();
            $loginModel->sessionLoginModel->resetSessionCookies();

    	// om ovan if-satts inte är sann, körs denna else if om den retunera true, att man har klickat på registrera ny användare
    	// anropas functionen registerNewUserName och där reggar man ny användare
        } else if($newUserController->newUserView->wantsToRegisterNewUser()) {
                $newUserController->registerNewUserName();

        } else {
	            if ($cookieView->hasCookies()) {	                                    // om kakor är satta kör if satsen,
	                $userHasCookie = $cookieView->getCookies();                         // getCookies function retuner array fyller variabel $userHasCookie
	                $loginModel->setState($userHasCookie);		                        // objekt loginModel anropar setstate function och skickar med
                                                                                        // arrayinnehållet från getCookies-funktionen
	            } else if ($loginModel->sessionLoginModel->hasSessionCookies()) {       // om sessionskakor är satta kör if satsen,

                   //kollar om man använder samma webbläsare som skapade sessionskakan annars används inte sessionskakan
                   if ($loginModel->sessionLoginModel->checkIfSessionBrowserIsOK()) {
                        $sessionUsername = $loginModel->sessionLoginModel->returnSessionUsername();
                        $sessionPassword = $loginModel->sessionLoginModel->returnSessionPassword();
                        $userHasSessionCookie = array($sessionUsername, $sessionPassword, false);
                        $loginModel->setState($userHasSessionCookie);                   //object loginModel anropar setstate function och skickar med
                   }                                                                    //arrayinnehållet i $userHasSessionCookie

                }

                //kollar om användaren matat in några inloggningsuppgifter då körs if-satsen
	            else if ($loginView->hasInput()) {

                      $userHasInput = $loginView->getInput();   //retunerar en array ($username, $password, $stayLoggedin) och fyller i $userHasInput
	    	          $loginModel->setState($userHasInput);		//skickar med innehåll i $userHasInput till setstate-funktionen
	    	    }
        }

        //här kollas om användaren är inloggad
    	if ($loginModel->m_isUserLogedIn) {

            if ($loginModel->m_userWantsToBeRemebered) {                                //om användaren bockat i "håll mig inloggad" så körs nedanstående
                $cookieView->setCookies($loginModel);                                   //här körs setCookie-funktionen som skapar användarens kakor
            }
        // om användaren inte är inloggad körs nedanstående else-sats
    	} else {
    	       $cookieView->resetCookies();                                             //kakorna rensas från innehåll
               $loginModel->sessionLoginModel->resetSessionCookies();                   //sessions-kakorna rensas från innehåll
        }

    	$returnOutput = $applicationController->outputController($loginModel, $loginView, $newUserController);
	   	return $returnOutput;                                                           //returnerar $returnOutput till index.php
  }


}

